<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>构造函数</title>
</head>
<body>
            <script>
//                function foo() {
//                    alert('嘻嘻')
//                }
//                foo();


                /*
                1 直接量定义对象
                    1.1 定义属性，并读取
                    1.2 定义方法，并执行
                    1.3 在方法中读取属性
                    1.4.在方法中修改属性，在读取
                2   给已存在的对象添加内容
                     2.1 添加属性
                     2.2 添加方法

                3 使用构造函数
                3.1 创建构造函数，并使用new实例化
                3.2 在构造函数中添加属性
                3.3 在构造函数中添加方法
                3.4 在方法中读取属性
                3.5 在方法中修改属性

                4 构造函数内的【变量与函数】的读取与执行
                4.1 构造函数内部变量如何在实例化后读取
                4.2 构造函数内部变量如何在实例化后设置
                4.3 如何保护构造函数内的变量，age只能是0-100内的数字

                4.4 构造函数内部函数如何在实例化后读取
                 */

//                var o = {
//                    age:30
//                }
//                console.log(o.age);

                function Person(){
                    var a=10;                  //变量与函数
                    this.getA = function(){         //a无法被p直接访问，需要借助属性操作变量
                            return a;               //通过属性内部的函数 返回变量a
                    }

                    // setA:我们需要修改变量a的值，但无法直接修改，只能通过方法，在方法内部重新修改变量a的内容

                    this.setA = function(v){
                        if (v>100 || v<0){
                            alert('不行')
                        } else {
                            //当前函数内部的变量 a就是person内的变量a，
                            //变量的作用范围是函数内部可以访问函数外部的变量
                            a = v;
                        }

                    }
                }
                var p = new Person();             //构造函数在实例化后读取,
// 实例化：最终得到一个对象，通过对构造函数进行内部操作，函数内部的this.xxx相关属性放入到一个新的对象。

//                p.a =
                console.log(p.getA())
                p.setA(100);
                console.log(p.getA())
            </script>
</body>
</html>